package com.cssw.fyzb.busi.service.video;

import com.cssw.fyzb.busi.model.tps.UploadSigVo;
import com.cssw.fyzb.core.model.vo.video.*;
import com.cssw.fyzb.core.model.dodb.CmfUserVideo;
import com.cssw.fyzb.core.model.dodb.CmfVideoComment;
import com.ydn.dbframe.plugin.activerecord.Page;

import java.util.List;

/**
 * @author Feng Chen
 */
public interface VideoService {

    /**
     * 添加视频
     *
     * @param userId 用户标识
     * @param title  主题
     * @param href   地址
     * @param thumb  封面
     * @param vodId  第三方视频编号，用于审核
     * @param lat    维度
     * @param lng    经度
     * @return
     */
    Long addVideo(Long userId, String title, String href, String thumb, String vodId, String lat, String lng);

    /**
     * 查询用户视频信息
     *
     * @param userId     用户标识
     * @param audit      审核状态(1-待审核  2-审核中  3-审核成功  4-审核失败)
     * @param pageNumber 当前页
     * @param pageSize   页大小
     * @return
     */
    Page<VideoVo> pageByUserId(Long userId, String audit, int pageNumber, int pageSize);

    /**
     * 查询 关注 视频
     *
     * @param userId     用户编号
     * @param pageNumber 当前页
     * @param pageSize   页大小
     * @return
     */
    Page<FocusVideoVo> pageFocus(Long userId, int pageNumber, int pageSize);

    /**
     * 查询 同城 视频
     *
     * @param lat        维度
     * @param lng        经度
     * @param pageNumber 当前页
     * @param pageSize   页大小
     * @return
     */
    Page<ScityVideoVo> pageScity(Long userId, String lat, String lng, int pageNumber, int pageSize);

    /**
     * 获取 发现 视频
     *
     * @param pageNumber 当前页
     * @param pageSize   页大小
     * @return
     */
    Page<FoundVideoVo> pageFound(Long userId, int pageNumber, int pageSize);

    /**
     * 查询 关注 视频
     *
     * @param userId     用户编号
     * @param pageNumber 当前页
     * @param pageSize   页大小
     * @return
     */
    Page<FocusVideoByPhpVo> pageFocusByPhp(Long userId, int pageNumber, int pageSize);

    /**
     * 查询 同城 视频
     *
     * @param lat        维度
     * @param lng        经度
     * @param pageNumber 当前页
     * @param pageSize   页大小
     * @return
     */
    Page<ScityVideoByPhpVo> pageScityByPhp(String city, String lat, String lng, int pageNumber, int pageSize);

    /**
     * 获取 发现 视频
     *
     * @param pageNumber 当前页
     * @param pageSize   页大小
     * @return
     */
    Page<FoundVideoByPhpVo> pageFoundByPhp(Long userId, int pageNumber, int pageSize);


    /**
     * 获取 热门推荐 视频
     *
     * @param pageNumber 当前页
     * @param pageSize   页大小
     * @return
     */
    Page<HotVideoVo> pageHot(Long userId, int pageNumber, int pageSize);

    /**
     * 添加本地视频(测试用)
     *
     * @param userId 用户标识
     * @param title  主题
     * @param media  地址
     * @param cover  封面
     * @param lat    维度
     * @param lng    经度
     * @return
     */
    Long addVideoByLocal(Long userId, String title, String media, String cover, String lat, String lng);

    /**
     * 获取视频统计信息
     *
     * @param videoId
     * @param userId
     * @return
     */
    VideoStatVo getStat(Long videoId, Long userId);

    /**
     * 获取视频统计信息
     *
     * @param videoId
     * @return
     */
    VideoStatNumVo getStatNum(Long videoId);

    /**
     * 点赞视频
     *
     * @param userId
     * @param videoId
     * @return
     */
    void like(Long userId, Long videoId);

    /**
     * 取消点赞
     *
     * @param userId
     * @param videoId
     */
    void cancelLike(Long userId, Long videoId);

    /**
     * 举报
     *
     * @param userId
     * @param videoId
     */
    void report(Long userId, Long videoId);

    /**
     * 下载
     *
     * @param userId
     * @param videoId
     */
    void download(Long userId, Long videoId);

    /**
     * 分页查询喜欢店视频列表
     *
     * @param userId
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Page<LikeVideoVo> pageVideoLike(Long userId, Integer pageNumber, Integer pageSize);

    /**
     * 记录观看视频时长
     *
     * @param userId
     * @param videoId
     * @param timeLong
     */
    void viewTimeVideo(Long userId, Long videoId, Integer timeLong);

    /**
     * 增加评论
     *
     * @param userId
     * @param videoId
     * @param replyCommentId
     * @param content
     * @return
     */
    Long addComment(Long userId, Long videoId, Long replyCommentId, String content);

    /**
     * 点赞评论
     *
     * @param userId
     * @param commentId
     * @return
     */
    Long likeComment(Long userId, Long commentId);

    /**
     * 查询视频评论列表
     *
     * @param videoId
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Page<VideoCommentVo> pageVideoComment(Long videoId, Integer pageNumber, Integer pageSize);

    /**
     * 查询评论回复列表
     *
     * @param commentId
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Page<VideoCommentVo> pageCommentReply(Long commentId, Integer pageNumber, Integer pageSize);

    /**
     * 查询用户评论列表
     *
     * @param userId
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Page<VideoCommentVo> pageCommentByUserId(Long userId, Integer pageNumber, Integer pageSize);

    /**
     * 视频热点定价列表
     *
     * @return
     */
    List<VideoHotDefVo> listHotDef();

    /**
     * 获取上传签名
     *
     * @return
     */
    UploadSigVo getUploadSigVo();

    /**
     * 购买视频热门
     *
     * @return
     */
    void buyHot(Long userId, Long videoId, Long hotId,String pwd);

    CmfVideoComment getCommentByCid(Long commentId);

//    CmfUserVideo getVideoByVid(Long videoId);

    Page<SearchVideoVo> searchVideo(Long userId, String key, Integer pageNumber, Integer pageSize);

    Integer action(Long videoId, String action, Long userId);
}
